// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rainbowchat.im.dto;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

/**
 * 消息body根类：普通聊天消息（指的是区别于非聊天消息的指令）中提炼出来的共有
 * 消息体字段属性。
 * <p>
 * 即聊天数据从MobileIMSDK底层发送时，会将本对象转JSON字串后，作为
 * Protocal的dataContent数据进行传输。
 * <p>
 * <b>理论上：</b>RainbowChat中用户可读的聊天消息（包括单聊、陌生人聊、世界频道、群聊）
 * 的消息body都应是本类的子类，否则服务端的离线处理将不会进行离线消息持久化（前提
 * 是需要离线存储的话，比如世界频道已经从逻辑上不需要支持离线的）。
 * 
 * @author Jack Jiang
 * @since 4.3
 */
public class MsgBodyRoot implements MsgType, ChatType
{
	/**
	 * From user uid（即消息发送者的id）. */
	protected String f = null;
	/**
	 * To user id or group id。
	 * <p>
	 * <b>即消息接收者的id：</b><br>
	 * 1）在群聊消息时，本字段存放的是群组id；<br>
	 * 2）普通一对的聊天时才是用户uid。 */
	protected String t = null;
	
	/**
	 * 消息内容字段（为了简化复杂性，建议保证只放纯文本）。 */
	protected String m = null;
	
	/**
	 * 消息内容扩展字段2，不用时可为空。
	 * <p>
	 * 当前用途：
	 * 1）用于文件消息时的文件md5码。
	 * 
	 * @since 4.3
	 */
	protected String m2 = null;
	
	/**
	 * 消息内容扩展字段3，不用时可为空。
	 * <p>
	 * 当前用途：
	 * 1）用于文件消息时的文件长度（long整数）。
	 * 
	 * @since 4.3
	 */
	protected String m3 = null;
	
	/**
	 * 聊天模式类型（默认值为 {@link #CHAT_TYPE_FREIDN$CHAT} ）.
	 * @since RainbowChat 4.3 */
	protected int cy = CHAT_TYPE_FREIDN$CHAT;
	
	/**
	 * 聊天消息类型（默认值为 {@link #TYPE_TEXT} ）.
	 * @since RainbowChat 2.2 */
	protected int ty = TYPE_TEXT;
	
	public MsgBodyRoot()
	{
		//
	}
	
	public String getF()
	{
		return f;
	}
	public void setF(String f)
	{
		this.f = f;
	}
	
	public String getT()
	{
		return t;
	}
	public void setT(String t)
	{
		this.t = t;
	}
	
	public String getM()
	{
		return m;
	}
	public void setM(String m)
	{
		this.m = m;
	}
	
	public int getTy()
	{
		return ty;
	}
	public void setTy(int ty)
	{
		this.ty = ty;
	}
	
	public String getM2()
	{
		return m2;
	}
	public void setM2(String m2)
	{
		this.m2 = m2;
	}
	
	public String getM3()
	{
		return m3;
	}
	public void setM3(String m3) 
	{
		this.m3 = m3;
	}
	
	public int getCy()
	{
		return cy;
	}

	public void setCy(int cy)
	{
		this.cy = cy;
	}

	/**
	 * 从JSON字串中反序列化。
	 * 
	 * @param originalMsg 即MsgBodyRoot对象的JSON序列化文本
	 * @return 解析成功则返回对象，否则返回null
	 * @since 2.0_rc11
	 */
	public static MsgBodyRoot parseFromSender(String originalMsg)
	{
		try
		{
			return new Gson().fromJson(originalMsg, MsgBodyRoot.class);
		}
		catch (JsonSyntaxException e)
		{
			return null;
		}
	}
}
